{{tag>dapper feisty gutsy hardy intrepid programmation}}
----


====== Valgrind =======






===== Présentation =====

**Valgrind** est une suite d'outils de profilage et de débuggage mémoire sous licence GPL, qui permet de détecter des problèmes de gestion mémoire dans des programmes écrits en C / C++. Plus généralement, **Valgrind** repose sur une architecture générique permettant la supervisation de programmes à l'aide de 3 outils principaux :

  * Un détecteur d'erreurs mémoires
  * Un profileur basé sur le temps d'exécution
  * Un profileur basé sur la mémoire

La détection d'erreurs fonctionne de cette manière : le programme doit être lancé dans l'environnement de Valgrind. Toutes les entrées / sorties mémoires sont alors analysées et vérifiées minitieusement en interceptant tous les appels à (malloc|new) et (free|delete).

<note importante>
**Valgrind** n'est pas capable de détecter certaines anomalies liées au code. Par exemple, il ne permet pas de vérifier les indices hors tableau sur des tableaux déclarés en statique.
</note>

===== Pré-requis =====
  * Avoir une connexion Internet fonctionnelle
  * Avoir les [[depots#universe_et_multiverse|dépôts Universe et Multiverse]] activés.

===== Installation =====
Il suffit d'installer le paquet **[[apt://valgrind]]**.


===== Utilisation =====
Dans ce qui suit, on considère un programme C compilé avec GNU / gcc : **test**. Ouvrez un terminal et suivez les instructions ci-dessous selon le test souhaité.

==== Détection de fuites mémoires ====
L'outil **memcheck** est l'outil de détection de fuites mémoires appelé par défaut. Il recherche les zones mémoires qui ne plus pointées et qui n'ont pas été désallouée (comportement par défaut).

  - Tapez par exemple la commande suivante pour lancer la détection d'erreurs sur **test** :

  valgrind --tool=memcheck --leak-check=yes|no|full|summary --leak-resolution=low|med|high --show-reachable ./test

où le paramètre `leak-check' peut prendre les valeurs suivantes :
  * **no         :** ne fait rien.
  * **full / yes :** donne des détails sur chaque fuite mémoire.
  * **summary    :** indique le nombre de fuites mémoires.

où le paramètre **show-reachable** étend la recherche aux zones encore pointées mais non désallouées.

où le paramètre **leak-resolution** indique le niveau de recherche des fuites mémoires.


==== Simulation de caches ====
L'outil **cachegrind** est un simulateur de cache I1/D1/L2. Il est possible de spécifier manuellement la configuration du cache à simuler. Pour chaque cache, on indique sa taille, l'associativité et la taille de la ligne. Les tailles doivent être données en octets.

  - Tapez par exemple la commande suivante pour lancer la simulation de 3 caches sur **test** :

  valgrind --tool=cachegrind --I1=65535,2,64 --D1=65535,2,64 --L2=65535,2,64 ./test

==== Profilage ====
L'outil **callgrind** permet de d'effectuer un profilage poussé du programme en comptabilisant le nombre d'appels et les coûts associés.

  - Tapez par exemple la commande suivante pour lancer le profilage sur **test** :

  valgrind --tool=callgrind ./test

===== Références =====
A titre informatif, voici quelques liens :

  * Manuel **Valgrind** complet : [[http://valgrind.org/docs/manual/index.html]]
  * Guide **Valgrind** de démarrage rapide : [[http://valgrind.org/docs/manual/QuickStart.html]]